package com.wdh.mychart;

import android.graphics.Color;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;

import com.github.mikephil.charting.charts.LineChart;
import com.github.mikephil.charting.components.AxisBase;
import com.github.mikephil.charting.components.Description;
import com.github.mikephil.charting.components.Legend;
import com.github.mikephil.charting.components.XAxis;
import com.github.mikephil.charting.components.YAxis;
import com.github.mikephil.charting.data.Entry;
import com.github.mikephil.charting.data.LineData;
import com.github.mikephil.charting.data.LineDataSet;
import com.github.mikephil.charting.formatter.IAxisValueFormatter;
import com.wdh.mychart.view.MyMarkerView;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class MPChartActivity extends AppCompatActivity {

    private LineChart lineChart;
    private List<Integer> list;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_mp_chart);
        lineChart = findViewById(R.id.chart);
        list = new ArrayList<>();
        list.add(12);
        list.add(15);
        list.add(8);
        list.add(10);
        initLineChart(list);

        //解决滑动冲突  scrollview或者listview中，会发现上下不能缩放，出现滑动冲突，解决方法如下
//        lineChart.setOnTouchListener(new View.OnTouchListener()
//        {
//            @Override
//            public boolean onTouch(View v, MotionEvent event)
//            {
//                switch (event.getAction())
//                {
//                    case MotionEvent.ACTION_DOWN:
//                    {
//                        scrollview.requestDisallowInterceptTouchEvent(true);
//                        break;
//                    }
//                    case MotionEvent.ACTION_CANCEL:
//                    case MotionEvent.ACTION_UP:
//                    {
//                        scrollview.requestDisallowInterceptTouchEvent(false);
//                        break;
//                    }
//                }
//                return false;
//            }
//        });
    }

    private int[] COLORS = {
            R.color.colorAccent, R.color.colorPrimary, R.color.colorPrimaryDark
    };

    /**
     * 初始化曲线图表
     *
     * @param list 数据集
     */
    private void initLineChart(final List<Integer> list) {
        //  手势交互
        lineChart.setDragEnabled(false);//启用/禁用拖动（平移）图表。
        lineChart.setScaleEnabled(false);//启用/禁用缩放图表上的两个轴。
        lineChart.setPinchZoom(false);//如果设置为true，没缩放功能。如果false，x轴和y轴可分别放大。
        //显示边界
        lineChart.setDrawBorders(false);
        //设置数据
        List<Entry> entries = new ArrayList<>();
        for (int i = 0; i < list.size(); i++) {
            entries.add(new Entry(i, (float) list.get(i)));
        }
        //一个LineDataSet就是一条线
        LineDataSet lineDataSet = new LineDataSet(entries, "");
        //线颜色
        lineDataSet.setColors(COLORS);
        //线宽度
        lineDataSet.setLineWidth(1.6f);
        //是否显示圆点
        lineDataSet.setDrawCircles(true);
        //圆点颜色
        lineDataSet.setCircleColor(Color.parseColor("#A862FF"));
        //设置是否实心
        lineDataSet.setDrawCircleHole(false);
        //线条平滑
        lineDataSet.setMode(LineDataSet.Mode.HORIZONTAL_BEZIER);
        //设置折线图填充
        lineDataSet.setDrawFilled(true);
        lineDataSet.setFillColor(Color.parseColor("#FD9AAA"));
        LineData data = new LineData(lineDataSet);
        //无数据时显示的文字
        lineChart.setNoDataText("暂无数据");
        //折线图不显示数值
        data.setDrawValues(false);
        //得到X轴
        XAxis xAxis = lineChart.getXAxis();
        //设置X轴的位置（默认在上方)
        xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
        //设置X轴坐标之间的最小间隔
        xAxis.setGranularity(1f);
        //设置X轴的刻度数量，第二个参数为true,将会画出明确数量（带有小数点），但是可能值导致不均匀
        xAxis.setLabelCount(list.size(), false);
        //设置X轴的值（最小值、最大值、然后会根据设置的刻度数量自动分配刻度显示）
        xAxis.setAxisMinimum(0f);
        xAxis.setAxisMaximum((float) list.size() - 1);
        //不显示网格线
        xAxis.setDrawGridLines(false);
        // 标签倾斜
        xAxis.setLabelRotationAngle(0);
        //设置X轴值为字符串
        xAxis.setValueFormatter(new IAxisValueFormatter() {
            @Override
            public String getFormattedValue(float value, AxisBase axis) {
                return "呵呵";
            }
        });
        //得到Y轴
        YAxis yAxis = lineChart.getAxisLeft();
        YAxis rightYAxis = lineChart.getAxisRight();
        //设置Y轴是否显示
        rightYAxis.setEnabled(false); //右侧Y轴不显示
        //设置y轴坐标之间的最小间隔
        //不显示网格线
        yAxis.setDrawGridLines(false);
        //设置Y轴坐标之间的最小间隔
        yAxis.setGranularity(1);
        //设置y轴的刻度数量
        //+2：最大值n就有n+1个刻度，在加上y轴多一个单位长度，为了好看，so+2  Collections.max(list) + 2
        yAxis.setLabelCount(Collections.max(list) + 1, false);
        //设置从Y轴值
        yAxis.setAxisMinimum(0f);
        //+1:y轴多一个单位长度，为了好看 Collections.max(list) + 1
        yAxis.setAxisMaximum(Collections.max(list));
        //y轴
        yAxis.setValueFormatter(new IAxisValueFormatter() {
            @Override
            public String getFormattedValue(float value, AxisBase axis) {
                int IValue = (int) value;
                return String.valueOf(IValue);
            }
        });
        //图例：得到Lengend
        Legend legend = lineChart.getLegend();
        //隐藏Lengend
        legend.setEnabled(false);
        //隐藏描述
        Description description = new Description();
        description.setEnabled(false);
        lineChart.setDescription(description);
        //折线图点的标记
        MyMarkerView mv = new MyMarkerView(MPChartActivity.this, R.layout.custom_marker_view);
        lineChart.setMarker(mv);
        //设置数据
        lineChart.setData(data);
        //图标刷新
        lineChart.invalidate();
    }
//    启用/禁用  手势交互
//    setTouchEnabled(boolean enabled)：启用/禁用与图表的所有可能的触摸交互。
//    setDragEnabled(boolean enabled)：启用/禁用拖动（平移）图表。
//    setScaleEnabled（boolean enabled）：启用/禁用缩放图表上的两个轴。
//    setScaleXEnabled(boolean enabled)：启用/禁用缩放在X轴上。
//    setScaleYEnabled(boolean enabled)：启用/禁用缩放在Y轴上。
//    setPinchZoom（boolena enabled）：如果设置为true，没缩放功能。如果false，x轴和y轴可分别放大。
//    setDoubleTapToZoomEnabled（booleanenabled）：设置为false以禁止通过在其上双击缩放图表。
//    setHighlightPerDragEnabled（booleanenabled）：设置为true，允许每个图表表面拖过，当它完全缩小突出。默认值：true
//    setHighlightPerTapEnabled(boolean enabled)：设置为false，以防止值由敲击姿态被突出显示。值仍然可以通过拖动或编程方式突出显示。默认值：true。
}
